//用户路由处理模块
//导入加密处理模块
const bcrypt = require('bcryptjs')

//导入数据库模块
const db=require("../db/index")
const { use } = require('../router/user')

//导入jsonwebtoken包
const jsonwebtoken=require("jsonwebtoken")

//导入config配置文件
const config=require("../config")

//注册处理
//流程
//1.检查用户名与密码是否为空
//2.判断注册的用户名是否重复
//3.给新用户的密码加密
//4.把数据插入数据库
exports.regUser=(req,res)=>{
    //接受新注册用户的信息
    const userInfo=req.body
    console.log(req.body)

    //流程1.判断用户信息是否为空
   /* if(!userInfo.username || !userInfo.password){
        //return res.send({status:1,message:"用户名与密码不能为空!"})
        return res.cc("用户名与密码不能为空!")
    }*/
    //流程2.在数据库中查找是否有重复的用户名
    //查询用户信息
    const strSql1='select * from ev_users where username=?'
    db.query(strSql1,[userInfo.username],(err,results)=>{
        if(err) 
            //return res.send({status:1,message:err.message})
            return res.cc(err)
        if(results.length>=1) 
            //return res.send({status:1,message:"用户名已被占用,请重新更换一个"})
            return res.cc("用户名已被占用,请重新更换一个")
        //流程三.加密
        userInfo.password=bcrypt.hashSync(userInfo.password,10)
        //流程四.插入数据库
        const sqlstr2="insert into ev_users Set ?"
        db.query(sqlstr2,{username:userInfo.username,password:userInfo.password},(err,results)=>{
            if(err) 
                //return res.send({status:1,message:err.code.message})
                return res.cc(err)
            if(results.affectedRows!==1) 
                //return res.send({status:1,message:"注册失败"})
                return res.cc(err)
            //注册成功
            res.send({status:0,message:"新用户注册成功"})
        })
    })

}

//登录处理
//处理流程
//1.做校验,使用express-joi完成
//2.判断用户名是否存在
//3.判断密码是否正确
//4.生成jwt的字符串


exports.login=(req,res)=>{
    //流程1已完成
    

    //接受参数
    const userInfo=req.body

    //2.判断用户名是否存在
    const sqlstr2='select * from ev_users where username=?'
    db.query(sqlstr2,[userInfo.username],(err,results)=>{
        if(err) return res.cc(err)  //查询出错
        if(results.length<1){
            //此时没有查询到相关数据
            return res.cc("该用户不存在")
        }
        //3.判断密码是否正确
        //第一个参数是原密码，第二个参数是加密后的密码
        const compareRes=bcrypt.compareSync(userInfo.password,results[0].password)
        if(!compareRes){//此时密码不相等
            return res.cc("密码错误")
        }
        //4.生成jwt字符串
        //过滤掉用户信息中密码与头像
        const user={...results[0],password:'',user_pic:''}

        //加密生成token字符串
        const jwttoken=jsonwebtoken.sign(user,config.jwtserertkey,{expiresIn:config.jwtexpiresIn})

        //返回结果
        res.send({
            status:0,
            message:"登录成功",
            token:'Bearer '+jwttoken
        })
    })

}
